sqLiteConnect <- function(database, table) {
  require(DBI)
  con <- dbConnect(RSQLite::SQLite(), dbname = database)
  query <- dbSendQuery(con, paste("SELECT * FROM ", table, ";", sep="")) 
  result <- fetch(query, n = -1)
  dbClearResult(query)
  dbDisconnect(con)
  return(result)
}

blog_post <- sqLiteConnect("m5s_blog_mar2015.sqlite", "post")

# Clean text
cleanText <- function(string){
  string <- gsub("<.*?>", " ", string)
  string <- gsub("\\\\r|\\\\n|\\n|\\r", " ", string)
  string <- gsub("[[:punct:]]+"," ", string)
  return(string)
}
cat("Cleaning...\n")
blog_post$text <- cleanText(blog_post$text)

# 
blog_post <- subset(blog_post, text != "")

require(tm)
require(slam)

cat("Make corpus...\n")
tm_corpus <- Corpus(VectorSource(blog_post$text))

stopwords_mylist <- unique(c("essere", "quindi", "anni", "cosa", "coso", "fare", "solo", "pensare",
                             "deve", "ben", "bene", "quando", "prima", "dopo", "tanto", "dico",
                             "molto", "dice", "dire", "come", "dato", "primo", "ciao", "fine", "poi",
                             "proprio", "piu", "più", "piú", "sempre", "senza", "tempo", "credo",
                             "credere", "perche", "perché", "perchè", "à\u0083à",
                             "â\u0080\u009aì", "â\u0080\u009eà", "può", "italia", "italiani", "però",
                             "nemmeno","volta","volte","fatto","fatti","basta","grazie","nessuno","nessuni",
                             "giorno", "mai", "male", "mal", "buon", "buono","nemmeno","vorrei","penso","tutto","tutti",
                             "così","ancora","forse", "altri","altro","modo","parte","qui","www","http",
                             "oggi","italiana","modo","ogni","attraverso","circa","ciò","già","qualche",
                             "dobbiamo","dovrebbe","tutte","potrebbe","meno","far","ecc","due","altre","width",
                             "vuoi","ora","italiano","ecco","allora","comunque","qualcuno","vedere","seguenti",
                             "gennaio","febbraio","marzo","aprile","maggio","giugno","luglio","agosto","settembre",
                             "ottobre","novembre","dicembre","possono","ecc","certo","poco","presente","molti",
                             "niente","quel","vuole","fino","seguenti","almeno","andare","rispetto","altre","vero",
                             "nulla","comunque","meglio","dare","due","cose","possono","caso","ora","tutta",
                             "stata","stessa","soprattutto","nuovo","tanti","possa","via","qualsiasi","tipo","altra",
                             "possibilità","quali","sembra","possibile","anno","viene","invece","vita","avere"))

createDTM <- function(text_vector){
  require(tm)
  require(SnowballC)
  # Prepare corpus
  tm_corpus <- Corpus(VectorSource(text_vector))
  tm_corpus <- tm_map(tm_corpus, tolower)
  tm_corpus <- tm_map(tm_corpus, removeWords, c(stopwords("italian"),stopwords_mylist))
  tm_corpus <- tm_map(tm_corpus, removeNumbers)
  tm_corpus <- tm_map(tm_corpus, PlainTextDocument)
  # tm_corpus <- tm_map(tm_corpus, stemDocument, language="italian")
  tm_corpus <- tm_map(tm_corpus, stripWhitespace)
  tm_corpus <- tm_map(tm_corpus, PlainTextDocument)
  tm_dtm <- DocumentTermMatrix(tm_corpus, control = list(minWordLength = 3))
  return(tm_dtm)
}

blog_post_dtm <- createDTM(blog_post$text)

blog_post_dtm_i <- row_sums(blog_post_dtm) > 0

blog_post <- blog_post[blog_post_dtm_i,]
blog_post_dtm <- blog_post_dtm[blog_post_dtm_i,]

nrow(blog_post_dtm) == nrow(blog_post)

require(tm)
require(slam)
require(topicmodels)

print('lda')

# NOTE: unfortunatelly I did not set a seed in my original computation. Output to the following command will then be slighltly different in your execution. 
lda <- LDA(blog_post_dtm, k = 20)


environment_terms <- c("\\benergia\\b", "\\bprodotti\\b", "\\bacqua\\b", "\\bproduzione\\b", "\\brifiuti\\b", "\\bprodotto\\b", "\\braccolta\\b",
                       "\\bimpianti\\b", "\\belettrica\\b", "\\bprodurre\\b", "\\bgas\\b", "\\bauto\\b", "\\bconsumo\\b", "\\bambiente\\b",
                       "\\benergetico\\b", "\\bdifferenziata\\b", "\\bimpianto\\b", "\\brisparmio\\b", "\\binquinamento\\b",
                       "\\bagricoltura\\b")

national_pol_terms <- c("\\bmovimento\\b", "\\bgoverno\\b", "\\bvoto\\b", "\\bpartiti\\b", "\\bgrillo\\b", "\\belezioni\\b",
                        "\\belettorale\\b", "\\bpolitica\\b", "\\bparlamento\\b", "\\bvotare\\b", "\\bpartito\\b", "\\bvotato\\b",
                        "\\bfiducia\\b", "\\bvoti\\b", "\\blegge\\b", "\\bstelle\\b", "\\bpdl\\b", "\\bberlusconi\\b", "\\bparlamentari\\b",
                        "\\bmaggioranza\\b", "\\bprogramma\\b", "\\bstato\\b", "\\brenzi\\b", "\\bdemocrazia\\b", "\\bpaese\\b",
                        "\\bbersani\\b", "\\bcittadini\\b", "\\bpresidente\\b", "\\b elettori\\b", "\\bpopolo\\b")

blog_post$environment <- grepl(paste0(environment_terms, collapse = "|"), blog_post$text, ignore.case = TRUE)
blog_post$national_pol <- grepl(paste0(national_pol_terms, collapse = "|"), blog_post$text, ignore.case = TRUE)

save(lda, blog_post, blog_post_dtm, file="02_01_m5s_blog_post_lda.RData")

